﻿using System;
using System.Collections.Generic;

namespace proba_pera
{
    public class Collector:RwpBaseObject
    {

        //список юнитов, которые должны прорисовываться (будет догружаться из класса карты)
        private readonly List<RwpUnit> _listToDraw;

        public Collector()
        {
            _listToDraw = new List<RwpUnit>();
        }

        public void Add(RwpUnit unit)
        {
            _listToDraw.Add(unit);
        }

        public void Destroy(int id)
        {
            foreach (RwpUnit unit in _listToDraw)
            {
                if (unit.GetId() == id) { _listToDraw.Remove(unit);
                    break;
                }
            }
        }

        //вернуть ссылку на юнит по айди
        public RwpUnit GetById(int id)
        {
            foreach (RwpUnit unit in _listToDraw)
            {
                if (unit.GetId() == id) return unit;
            }
            return null;
        }

        //вернуть список юнитов
        public List<RwpUnit> GetList()
        {
            return _listToDraw;
        }

        //произвести обновление элементов
        public void Renew()
        {
            foreach (var rwpUnit in _listToDraw)
            {
                rwpUnit.Life();
            }
        }

        //вернуть ссылку на юнита по координатам
        public RwpUnit SearchByXy(double x, double y)
        {
            foreach (var rwpUnit in _listToDraw)
            {
// ReSharper disable CompareOfFloatsByEqualityOperator
                if (rwpUnit.GetX() == x && rwpUnit.GetY() == y)
// ReSharper restore CompareOfFloatsByEqualityOperator
                {
                    return rwpUnit;
                }
            }
            return null;
        }

        //вернуть ссылку и обозначить юнита выбраным
        public RwpUnit SelectByXy(int x, int y)
        {
            foreach (var rwpUnit in _listToDraw)
            {
// ReSharper disable CompareOfFloatsByEqualityOperator
                if (rwpUnit.GetX() == x && rwpUnit.GetY() == y)
// ReSharper restore CompareOfFloatsByEqualityOperator
                {
                    rwpUnit.Selected = true;
                    return rwpUnit;
                }
            }
            return null;
        }

        //выбор региона
        public RwpUnit SelectRegionByXy(double startX, double startY, double endX, double endY, bool multipleSelection)
        {
            RwpUnit buf = null;
            foreach (var rwpUnit in _listToDraw)
            {
                if (rwpUnit.GetX() >= Math.Min(startX, endX) && rwpUnit.GetX() <= Math.Max(startX, endX) && rwpUnit.GetY() < Math.Max(startY, endY) && rwpUnit.GetY() > Math.Min(startY, endY))
                {
                    rwpUnit.Selected = true;
                    buf = rwpUnit;
                    if (!multipleSelection) break;
                }
            }
            return buf;
        }
    }
}